
var functionList;
$(document).ready(function () {
    var jstree = $('#function-list').jstree({
        'core': {
            'data': null,
            'multiple':true
        },
        "plugins" : ["checkbox" ],
        "checkbox":{
            "visible":true
        }
    });
    $('#function-list').jstree(true).get_all_checked = function(full) {
        var tmp=new Array;
        for(var i in this._model.data){
            if((this.is_undetermined(i)||this.is_checked(i))&&i!="#"){tmp.push(full?this._model.data[i]:i);}
        }
        return tmp;
    };
    loadFunctionData();
});

function loadFunctionData(){
    $(".loading").css("top",$(window).height() / 2 - 30);
    displayLoading(true);
    $.post("/manage/system/getAllForTree",{"functionId":0},
        function(data){
            if(data.status==1){//登陆成功
                //加载用户信息
                functionList = data.result;
                loadTreeData();
            }
            else if(data.status==4){
                window.location.href="/manage/nopermission.html";
            }
            else if(data.status==5){
                alert(data.msg);
                window.location.href="/manage/login.html";
            }
            else{
                alert(data.msg);
            }
            hiddenLoading(true);
        });
}
function loadTreeData(){
    var treeNodes = "[";
    for(var i = 0;i<functionList.length;i++){
        if(i==0){
            treeNodes+='{"id":"';
        }
        else{
            treeNodes+=',{"id":"';
        }
        treeNodes+= functionList[i].functionId+'","parent":"';
        treeNodes+= functionList[i].functionParentid+'","text":"',
            treeNodes+=  functionList[i].functionName+'","functionUrl":"';
        treeNodes+= functionList[i].functionUrl+'","functionOrder":';
        treeNodes+= functionList[i].functionOrder+',"functionOrder":"'
        treeNodes+= functionList[i].language+'"}';
    }
    treeNodes+="]";
    treeNodes = treeNodes.replace(new RegExp('"null"',"gm"),"null");
    treeNodes = treeNodes.replace(new RegExp('"0"',"gm"),'"#"');
    var jsonNodes = JSON.parse(treeNodes);
    $('#function-list').jstree(true).settings.core.data=jsonNodes;
    $('#function-list').jstree(true).refresh();
}

var table = layui.table;

//执行渲染
table.render({
    even:true//隔行背景
    ,elem: '#role-list' //指定原始表格元素选择器（推荐id选择器）
    ,height: 'full-220' //容器高度
    ,cols: [[{checkbox: true}
        ,{field: 'roleId', title: 'ID', width: 80}
        ,{field: 'roleName', title: '角色名',sort:true,width:200}
        ,{fixed: 'right', width:150, align:'center', toolbar: '#toolBar',title:'操作'} //这里的toolbar值是模板元素的选择器

    ]] //设置表头
    ,url: '/manage/system/getRoles'
    ,where: {
        keywords:$("#keyword").val(),
        field:'role_name',
        order:'ASC'
    }
    ,method: 'post' //如果无需自定义HTTP类型，可不加该参数
    //request: {} //如果无需自定义请求参数，可不加该参数
    ,response: {
        statusName: 'status' //数据状态的字段名称，默认：code
        ,statusCode: 1 //成功的状态码，默认：0
        ,dataName: 'result' //数据列表的字段名称，默认：data
    } //如果无需自定义数据响应名称，可不加该参数
    ,page:true
    ,limits:[10,20,30,40,50,60,70,80,90,100]
    ,limit:10
    ,loading:true
    ,id:'id'
    //,…… //更多参数参考右侧目录：基本参数选项
});
//监听工具条
table.on('tool(test)', function(obj){ //注：tool是工具条事件名，test是table原始容器的属性 lay-filter="对应的值"
    var data = obj.data; //获得当前行数据
    var layEvent = obj.event; //获得 lay-event 对应的值
    var tr = obj.tr; //获得当前行 tr 的DOM对象

    if(layEvent === 'del'){ //删除
        deleteRoles(obj);
    } else if(layEvent === 'edit'){ //编辑
        openEditRole(obj);
    }
});
table.on('sort(test)', function(obj){ //注：sort是排序事件名，test是table原始容器的属性 lay-filter="对应的值"
    console.log(obj.field); //当前排序的字段名
    console.log(obj.type); //当前排序类型：desc（降序）、asc（升序）、null（空对象，默认排序）
    console.log(this); //当前排序的 th 对象

    //尽管我们的 table 自带排序功能，但并没有请求服务端。
    //有些时候，你可能需要根据当前排序的字段，重新向服务端发送请求，如：
    table.reload('id', {
        initSort: obj //记录初始排序，如果不设的话，将无法标记表头的排序状态。 layui 2.1.1 新增参数
        ,where: { //请求参数
            field: obj.field //排序字段
            ,order: obj.type //排序方式
        }
    });
});
//重新加载数据
function reloadTableData(){
    table.reload('id',{
        method:'post'
        ,url: '/manage/system/getRoles'
        ,where: {
            keywords:$("#keyword").val(),
            field:'roleName',
            order:'ASC'
        }

    });
}
layui.use(['form'], function(){
    var form = layui.form;

    //自定义验证规则
    form.verify({
        title: function(value){
            if(value.length < 2){
                return '标题至少得2个字符啊';
            }
        }
    });

    //监听提交
    form.on('submit(demo1)', function(data){
        //JSON.stringify(data.field)
        var checkedNodes  =  $('#function-list').jstree(true).get_all_checked();
        var role ={
            roleId:$("#roleId").val(),
            roleName:$("#roleName").val(),
            functions:checkedNodes.join(',')
        }
        displayLoading(true);
        $.post("/manage/system/updateRole",$.param(role),
            function(data){
                if(data.status==1){
                    //先更新本地数据
                    layer.msg('保存成功', {icon: 6});
                }
                else if(data.status==5){
                    layer.confirm(data.msg, {icon: 3, title:'提示'}, function(index){
                        window.location.href="/manage/login.html";
                        layer.close(index);
                    });
                }
                else{
                    layer.msg(data.msg, {icon: 6});
                }
                hiddenLoading(true);
                $("#role-model").modal('hide');
                reloadTableData();
            });
        return false;
    });
});
function openAddRole(){
    $('#function-list').jstree(true).uncheck_all();
    $('#roleId').val('0');
    $('#roleName').val("");
    $("#role-model").modal({
        keyboard: true
    });
}
function openEditRole(obj){
    if(obj.data.functions){
        var functionList = obj.data.functions.split(',');
        $('#function-list').jstree(true).check_all();
        var nodes = $('#function-list').jstree(true).get_checked(true);
        $('#function-list').jstree(true).uncheck_all();
        nodes.forEach(function(value,index,array){
            functionList.forEach(function(functionId,i,arryFunction){
                if(value.id==functionId&&value.children.length==0){
                    $('#function-list').jstree(true).check_node(value);
                }
            });
        });
    }
    else{
        $('#function-list').jstree(true).uncheck_all();
    }
    $('#roleId').val(obj.data.roleId);
    $('#roleName').val(obj.data.roleName);
    $("#role-model").modal({
        keyboard: true
    });
}
function deleteRoles(obj){
    layer.confirm('删除此数据，会删除用户相关角色的关联数据和角色对应的功能数据，确认要删除此数据吗？', function(index){
        layer.close(index);
        var arrayRoleID = new Array();
        if(obj){//删除单行
            arrayRoleID.push(obj.data.roleId);
        }
        else{//删除选中行
            var checkStatus = table.checkStatus('id');
            if(checkStatus.data.length==0){
                layer.msg('请先选择要删除的行',{icon:5});
                return;
            }
            else{
                checkStatus.data.forEach(function(item,index,dataList){
                    arrayRoleID.push(item.roleId);
                });
            }
        }
        displayLoading(true);
        $.post("/manage/system/deleteRole",{roleIdList:arrayRoleID},
            function(data){
                if(data.status==1){
                    //先更新本地数据
                    layer.msg('保存成功', {icon: 6});
                }
                else if(data.status==4){
                    window.location.href="/manage/nopermission.html";
                }
                else if(data.status==5){
                    layer.confirm(data.msg, {icon: 3, title:'提示'}, function(index){
                        window.location.href="/manage/login.html";
                        layer.close(index);
                    });
                }
                else{
                    layer.msg(data.msg, {icon: 6});
                }
                hiddenLoading(true);
                $("#role-model").modal('hide');
                reloadTableData();
            });
    });

}
$("#addRole").on('click',openAddRole);
$("#refresh,#search").on("click",reloadTableData);
$("#delAll").on('click',function(){deleteRoles()});